package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.RowEditEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.dominio.common.helper.SelectOneMenuHelper;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteCtaBancaria;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.service.IServicioBanco;
import pe.com.cotelasa.scp.dominio.service.IServicioTipoMoneda;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.Banco;
import pe.com.cotelasa.scp.entidad.CuentaBancaria;
import pe.com.cotelasa.scp.entidad.TipoMoneda;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

@Named(value = "MBComponenteCtaBancaria")
@Scope("request")
public class MBComponenteCtaBancaria extends MBGenerico implements Serializable {

    @Inject
    private BKComponenteCtaBancaria bkComponenteCtaBancaria;
    @Inject
    private IServicioTipoMoneda servicioTipoMoneda;
    @Inject
    private IServicioBanco servicioBanco;
    @Autowired
    BKSession session;

    public void eliminarCtaBancaria(ActionEvent actionEvent) {
        CuentaBancaria cuentaEliminado = this.bkComponenteCtaBancaria.getCurrentCtaBancaria();
        this.bkComponenteCtaBancaria.getListaCtaBancaria().remove(cuentaEliminado);
        if (cuentaEliminado.getId() != null) {
            Integer index = bkComponenteCtaBancaria.getListaCtaBancariaEditar().indexOf(cuentaEliminado);
            cuentaEliminado.setEstadoRegistro(ESTADO_REGISTRO.INACTIVO.getValor());
            cuentaEliminado.setFecModificacion(new Date());
            cuentaEliminado.setUsrModificacion(session.getUsuario().getUsuario());
            this.bkComponenteCtaBancaria.getListaCtaBancariaEditar().set(index, cuentaEliminado);
        }
    }

    public void agregarCtaBancaria(ActionEvent actionEvent) {
        CuentaBancaria cuentaAgregado = this.bkComponenteCtaBancaria.getFormularioCtaBancaria();


        cuentaAgregado.setIdTipoMoneda(null);
        cuentaAgregado.setUsrCreacion(session.getUsuario().getUsuario());
        cuentaAgregado.setFecCreacion(new Date());
        cuentaAgregado.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
        cuentaAgregado.setMontoApertura(BigDecimal.ZERO);
        if (cuentaAgregado.getNumeroCuenta() == null) {
            cuentaAgregado.setNumeroCuenta("");
        }
        try {
            cuentaAgregado.setIdBanco(servicioBanco.conseguirBancoPorId(this.bkComponenteCtaBancaria.getIdBanco()));
            cuentaAgregado.setIdTipoMoneda(servicioTipoMoneda.conseguirTipoMonedaPorId(this.bkComponenteCtaBancaria.getIdTipoMoneda()));
        } catch (ServiceException e) {
            e.printStackTrace();
            mostrarError("Ocurrieron algunos problemas al cargar la informacion. Vuelva a intentar.");
        }
        this.bkComponenteCtaBancaria.getListaCtaBancaria().add(cuentaAgregado);
        this.bkComponenteCtaBancaria.getListaCtaBancariaEditar().add(cuentaAgregado);
        this.bkComponenteCtaBancaria.setFormularioCtaBancaria(new CuentaBancaria());
    }

    public void editarCtaBancaria(RowEditEvent event) {
        CuentaBancaria cuentaEditado = (CuentaBancaria) event.getObject();
        Integer index = this.bkComponenteCtaBancaria.getListaCtaBancariaEditar().indexOf(cuentaEditado);
        try {
            if (cuentaEditado.getNumeroCuenta() == null) {
                cuentaEditado.setNumeroCuenta("");
            }
            cuentaEditado.setIdBanco(servicioBanco.conseguirBancoPorId(cuentaEditado.getIdBanco().getId()));
            cuentaEditado.setIdTipoMoneda(servicioTipoMoneda.conseguirTipoMonedaPorId(cuentaEditado.getIdTipoMoneda().getId()));
        } catch (ServiceException e) {
            e.printStackTrace();
            mostrarError("Ocurrieron algunos problemas al cargar la informacion. Vuelva a intentar.");
        }
        if (cuentaEditado.getId() != null) {

            cuentaEditado.setUsrModificacion(session.getUsuario().getUsuario());
            cuentaEditado.setFecModificacion(new Date());
        }

        this.bkComponenteCtaBancaria.getListaCtaBancariaEditar().set(index, cuentaEditado);
    }
}
